package com.own.demo.lwf.common.collection;

import java.util.*;

/**
 * @version v1.0
 * @Description:
 *  1.ArrayList:底层数组，有序可重复，查询快增删慢。线程不安全。不可为空，isEmpty会报异常因为不分配内存但是”“或者new但不放值为true
 *  2.LinkedList:底层双向链表，有序可重复，查询慢增删快，线程安全
 *  3.TreeSet:底层treeMap即红黑树.有序不重复,实现SortedSet接口，自然排序，线程不安全
 *  4.HashMap:底层红黑树。底层数组+链表+红黑树。无序.允许null但只允许出现一个null！线程不安全
 * @Author Administrator
 * @Date 2022/8/13 0013 20:19
 * @copyright 李文峰
 */
public class CollectionDemo {
    public static void main(String[] args) {
        // 1.ArrayList:底层数组，有序可重复，查询快增删慢。不可为空，isEmpty会报异常因为不分配内存但是”“或者new但不放值为true
        List list1 = new ArrayList(Arrays.asList(3, 2, 2, 5, 4, 6, 6, 7));
        System.out.println(list1);
        // 增
        list1.add(2, 6);
        System.out.println(list1);
        // 删
        list1.remove(5);
        System.out.println(list1);
        // 改
        list1.set(1, 100);
        System.out.println(list1);
        // 查
        System.out.println(list1.get(4));

        // 2.LinkedList:底层双向链表，有序可重复，查询慢增删快
        List list2 = new LinkedList();

        // 底层hash表，无序不重复,顺序会变可为空
        Set set = new HashSet();
        set.add("张三");
        set.add("王五");
        set.add("张三");
        set.add("李四");
        set.add("赵六");
        System.out.println(set);

        // 3.TreeSet:有序不重复,实现SortedSet接口，自然排序
        Set set1 = new TreeSet();
        set1.add("张三");
        set1.add("王五");
        set1.add("张三");
        set1.add("李四");
        set1.add("赵六");
        System.out.println(set1);


        // 4.HashMap:底层红黑树。底层数组+链表+红黑树。无序.允许null但只允许出现一个null！
        Map<String, String> map = new HashMap<String, String>();
        map.put("张三", "464789");
        map.put("王五", "774785");
        map.put("李四", "449689");
        map.put("六儿", "4948985");
        map.put("乖", "4664789");
        System.out.println(map);
        // 删
        map.remove("乖");
        System.out.println(map);
        // 改
        map.replace("李四", "6666666666");
        System.out.println(map);
        // *****HashMap的san种迭代方式****
        // 1.for迭代entries
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        // 2.分别迭代key和value
        for (String key : map.keySet()) {
            System.out.println(key);
        }
        for (String value : map.values()) {
            System.out.println(value);
        }
        // 3.Iterator迭代器遍历
        Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry<String, String> entry = entries.next();
            System.out.println(entry.getKey() + ":" + entry.getValue());

        }


        // 有序，实现SortMap接口
        Map map1 = new TreeMap();
        map1.put("张三", "464789");
        map1.put("王五", "774785");
        map1.put("李四", "449689");
        map1.put("六儿", "4948985");
        map1.put("乖", "4664789");
        System.out.println(map1);

    }
}
